#include "vlcwidget.h"
#include "ui_widget.h"
#include <QGridLayout>
#include <QWidget>
#include <QPushButton>
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>
#include <QSlider>
#include <QtGlobal>
#include <QTime>

#include <QKeyEvent>
#include <QStringList>
extern HWND cmwHwnd;
VLCWidget::VLCWidget(QWidget *parent)
    : CFramelessWidget(parent)
{


    //setWindowTitle("VLCWidget");
    //
    ////VLC
    //_vlcKits = new VLCKits();
    //
    //QGridLayout *gridLayout = new QGridLayout(this);
    //
    //// 3. 初始化控件
    //_videoWidget = new QWidget(this);
    //_videoWidget->setStyleSheet("background-color: black;");
    ////_videoWidget->resize(750, 500);
    //
    ////进度条
    //_hSlider = new QSlider(Qt::Horizontal);
    //
    ////底部栏
    //_cbcb = new CBottomCtrlBar();
    //_cbcb->showTimeLabel(true);
    //_cbcb->setVLC(_vlcKits);
    //
    //_playbtn = _cbcb->getcplaybtn();
    //
    ////布局
    //gridLayout->addWidget(_videoWidget, 0, 0, 1, 6);
    //gridLayout->addWidget(_hSlider, 1, 0, 1, 6);
    //gridLayout->addWidget(_cbcb, 3, 0, 1, 6);
    //
    //setLayout(gridLayout);
    //
    ////按钮信号和槽
    //connect(_cbcb, &CBottomCtrlBar::sig_play, this, &VLCWidget::play_pause);
    //connect(_cbcb, &CBottomCtrlBar::sig_stop, this, &VLCWidget::on_btnStop_clicked);
    //connect(_cbcb, &CBottomCtrlBar::sig_fullScreen, this, &VLCWidget::fullScreen);
    //
    ////VLC信号和槽
    ////时间
    //connect(_vlcKits, &VLCKits::sigCurPlay, this, &VLCWidget::setCurPlayTime);
    //connect(_vlcKits, &VLCKits::sigTotal, this, &VLCWidget::setTotalTime);
    ////进度条
    //connect(_vlcKits, &VLCKits::sigTimeSliderPos, this, &VLCWidget::setTimeSliderValue);
    //connect(_hSlider, &QSlider::sliderMoved, _vlcKits, &VLCKits::setPosition);
}

/*
// 处理bug，
// bug: 当鼠标移动到播放视频的窗口中时，会自动消失，且无法再响应鼠标的双击操作，从而导致鼠标双击操作失效
BOOL CALLBACK EnumVLC(HWND hwnd, LPARAM lParam)
{
    TCHAR szTitle[1024];

    qDebug() << "91-------" << endl;
    int nLen = GetWindowText(hwnd, szTitle, 1024);
    qDebug() << "92-------" << endl;

    if (nLen > 0)
    {
        // 启用或者禁用鼠标和键盘对指定窗口或控件的输入。
        // 禁用输入时，窗口不会接收鼠标单击和按键等输入；
        // 启用输入时，窗口将接收所有输入
        qDebug() << "98-------" << endl;
        EnableWindow(hwnd, FALSE);
        KillTimer(NULL, 1);
    }

    return TRUE;
}

void CALLBACK TimeProc(HWND hwnd, UINT msg, UINT_PTR id, DWORD time)
{
    HWND vlcHwnd = FindWindowEx(cmwHwnd, NULL, NULL, L"VLCWidget");

    if (vlcHwnd)
    {
        qDebug() << "111-------" << endl;
        EnumChildWindows(vlcHwnd, EnumVLC, NULL);
    }
}

// 获取指定目录下所有 .mp4 和 .avi 文件
QStringList getVideoFiles(const QString& path) {
    QDir dir(path);
    if (!dir.exists()) {
        qWarning() << "目录不存在:" << path;
        return QStringList();
    }

    // 设置文件过滤器（支持通配符）
    QStringList filters;
    filters << "*.mp4" << "*.avi" << "*.mkv";

    // 获取所有匹配文件（按名称排序）
    QStringList files = dir.entryList(filters, QDir::Files, QDir::Name);

    // 转换为绝对路径
    for (int i = 0; i < files.size(); ++i) {
        files[i] = dir.absoluteFilePath(files[i]);
    }

    return files;
}

void VLCWidget::on_btnOpen_clicked()
{
    qDebug() << "on_btnOpen_clicked";
    QString filename = QFileDialog::getOpenFileName(this, "请选择视频文件", "D:\\videos",
                                                    "视频文件(*.mp4);;"
                                                    "视频文件(*.avi);;"
                                                    "视频文件(*.mkv);;");
    qDebug() << "filename:" << filename;
    if(filename.isEmpty()) {
        return;
    }
    //注意:这一步必须要做,否则就会有bug
    //将路径名转换
    filename = QDir::toNativeSeparators(filename);
    qDebug() << "filename:" << filename;
    //1.初始化vlc实例
    _vlcKits->initVLC();

    //2. 设置媒体路径
    //3. 初始化mediaplayer
    //4. 设置播放的窗口句柄
    //5. 设置播放器的事件注册管理器

    QString videoFolder = "D:/qt/qtProject/videos"; // 使用正斜杠兼容跨平台
    QStringList videoList = getVideoFiles(videoFolder);

    bool ret = _vlcKits->play(videoList, (void *)_videoWidget->winId());
    if(!ret) {
        QMessageBox::information(this, "提示", "播放文件失败");
        return;
    }
    _isplay=true;

    //Windows头文件中的定时器函数
    int nret = SetTimer(NULL, 1, 300, TimeProc);
    //EnableWindow();//启用和禁用窗口接收事件
}

void VLCWidget::on_btnStop_clicked()
{
    qDebug() <<"on_btnStop_clicked";
    //7.停止播放
    _vlcKits->stop();
    _isplay=false;
}

void VLCWidget::setTimeSliderValue(int position)
{
    // 确保百分比在有效范围内
    //position = qBound(0.0f, position, 100.0f);

    // 更新滑块位置（QSlider的值为整数）
    _hSlider->setValue(static_cast<int>(position));
}

//void VLCWidget::setTimeText(const QString &str)
//{
//    // 直接更新标签文本
//    _timeLabel->setText(str);
//
//    // 可选：自动调整标签大小以适应内容
//    _timeLabel->adjustSize();
//}

//void VLCWidget::setVolumeSliderValue(int val)
//{
//    // 确保音量在有效范围内
//    val = qBound(0, val, 100);
//
//    // 更新滑块位置
//    _volumeSlider->setValue(val);
//}

void VLCWidget::setCurPlayTime(const qint64 &curMs)
{
    _cbcb->setCurPlayTime(curMs);
    //qDebug() << "224:  ----  " << curMs << endl;
}

void VLCWidget::setTotalTime(const qint64 &tatalMs)
{
    _cbcb->setTotalTime(tatalMs);
    //qDebug() << "230:  ----  " << tatalMs << endl;
}

//鼠标双击窗体来达到全屏的效果
void VLCWidget::mouseDoubleClickEvent(QMouseEvent *event)
{
    if(this->isFullScreen()) {
        this->showNormal();
    } else{
        this->showFullScreen();
    }
}

void VLCWidget::fullScreen()
{
    qDebug() << "253----" << this->isFullScreen() << endl;
    if(this->isFullScreen()) {
        this->showNormal();
        qDebug() << "256----" << endl;
    } else{
        this->showFullScreen();
        qDebug() << "259----" << endl;
    }
}

void VLCWidget::play_pause()
{
    if(_isplay == false) {
        _vlcKits->play();
        _isplay=true;
    } else{
        _vlcKits->pause();
        _isplay=false;
    }
}

//按ESC键来退出全屏播放
void VLCWidget::keyPressEvent(QKeyEvent *event)
{
    if(event->key() == Qt::Key_Escape) {
        this->showNormal();
    }
}
*/
